package com.heima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.heima.mapper.SkuMapper;
import com.heima.pojo.entity.Sku;
import com.heima.pojo.entity.SkuClass;
import com.heima.pojo.vo.SkuClassPageVo;
import com.heima.pojo.vo.SkuClassVo;
import com.heima.pojo.vo.SkuPageVo;
import com.heima.service.SkuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Service
public class SkuServiceImpl implements SkuService {
    @Autowired
    private SkuMapper skuMapper;

    /**
     * 添加商品分类
     * @param className
     * @return
     */
    @Override
    public Boolean addSkuClass(String className) {

        SkuClass skuClass = new SkuClass();
        skuClass.setClassName(className);
        Boolean result = skuMapper.addSkuClass(skuClass);
        return result;
    }

    /**
     * 获取商品分类列表
     * @param pageIndex
     * @param pageSize
     * @param className
     * @return
     */
    @Override
    public SkuClassPageVo getSkuClsList(Integer pageIndex, Integer pageSize, String className) {
        PageHelper.startPage(pageIndex,pageSize);
        SkuClass skuClass = new SkuClass();
        skuClass.setClassName(className);
        //获取商品分类列表集合
        List<SkuClass> list = skuMapper.getSkuClass(skuClass);
        //封装分页数据
        SkuClassPageVo skuClassPageVo = new SkuClassPageVo();
        skuClassPageVo.setCurrentPageRecords(list);
        skuClassPageVo.setPageIndex(pageIndex);
        skuClassPageVo.setPageSize(pageSize);
        //强转后获取总记录数和总页数
        Page<SkuClass> page = (Page<SkuClass>) list;
        skuClassPageVo.setTotalCount(page.getTotal());
        skuClassPageVo.setTotalPage(page.getPages());
        return skuClassPageVo;
    }

    /**
     * 修改商品分类名称
     * @param classId
     * @param className
     * @return
     */
    @Override
    public Boolean updateSkuClsName(Integer classId, String className) {
       Boolean result = skuMapper.updateSkuClsName(classId,className);
        return result;
    }

    /**
     * 删除商品分类
     * @param classId
     */
    @Override
    public void deleteSkuCls(Integer classId) {
        skuMapper.deleteSkuCls(classId);
    }

    /**
     * 根据分类ID获取商品分类信息
     * @param classId
     * @return
     */
    @Override
    public SkuClassVo getSkuClsById(Integer classId) {
        SkuClass skuClass = skuMapper.getSkuClassById(classId);
        SkuClassVo skuClassVo = new SkuClassVo();
        skuClassVo.setClassName(skuClass.getClassName());
        skuClassVo.setClassId(skuClass.getClassId());
        return skuClassVo;
    }

    /**
     * 新增商品
     * @param sku
     * @return
     */
    @Override
    public Boolean save(Sku sku) {
        sku.setCreateTime(LocalDateTime.now());
        sku.setUpdateTime(LocalDateTime.now());
        sku.setDiscount(false);
        Boolean save = skuMapper.save(sku);
        return save;
    }

    /**
     * 分页查询商品列表
     * @param pageIndex
     * @param pageSize
     * @param skuName
     * @return
     */
    @Transactional
    @Override
    public SkuPageVo pageSku(Integer pageIndex, Integer pageSize, String skuName) {
        PageHelper.startPage(pageIndex,pageSize);
       //查询商品列表结果，动态查询
       List<Sku> skuList =  skuMapper.getSku(skuName);
        SkuClass skuClass = new SkuClass();
        List<Sku> skuList2 = new ArrayList<>();
        for (Sku sku : skuList){
           //获取classid 并绑定分类 ，根据id查询分类
           Integer classId = sku.getClassId();
           //获得分类的集合
            SkuClass skuClassList = skuMapper.getSkuClassById(classId);
            //设置商品类别到返回对象
            sku.setSkuClass(skuClassList);
            //把内容重新装入skuList
            skuList2.add(sku);
        }
        Page<Sku> skus = (Page<Sku>) skuList;

        //封装分页数据
        SkuPageVo skuPageVo = new SkuPageVo();
        skuPageVo.setCurrentPageRecords(skuList2);
        skuPageVo.setPageIndex(pageIndex);
        skuPageVo.setPageSize(pageSize);
        //强转后获取总记录数和总页数
        skuPageVo.setTotalCount(skus.getTotal());
        skuPageVo.setTotalPage(skus.getPages());

        return  skuPageVo;
    }

    /**
     * 修改商品信息
     * @param skuId
     * @param sku
     * @return
     */
    @Override
    public Boolean updateSku(String skuId, Sku sku) throws NullPointerException{
        //先获取商品
       Sku sku1 = skuMapper.getSkuById(skuId);
        //判断是否为空
       if (sku1 == null){
            throw new NullPointerException("商品不存在");
       }
       //修改商品信息
      sku.setUpdateTime(LocalDateTime.now());
      Boolean result = skuMapper.updateSku(skuId,sku);
      return result;
    }

}
























